home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / util / observe / observableproperty.pyo (.txt) < prev   
Python Compiled Bytecode  |  2008-10-13  |  4KB  |  94 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from pprint import pprint
  5. from collections import defaultdict
  6.  
  7. class ObservableMeta(type):
  8.     
  9.     def __new__(mcl, name, bases, cdict):
  10.         obsprops = _[1]
  11.         for name, prop in obsprops:
  12.             for hidden_attr in prop.observe:
  13.                 props[hidden_attr].append(name)
  14.             
  15.         
  16.         return super(ObservableMeta, mcl).__new__(mcl, name, bases, cdict)
  17.  
  18.  
  19.  
  20. class ObservableProperty(object):
  21.     
  22.     def __init__(self, fget = None, fset = None, fdel = None, doc = None, observe = sentinel):
  23.         if not all((lambda .0: for c in .0:
  24. callable(c))(filter(None, [
  25.             fget,
  26.             fset,
  27.             fdel]))):
  28.             raise AssertionError('%s %s %s' % (repr(fget), repr(fset), repr(fdel)))
  29.         
  30.         self.fget = fget
  31.         self.fset = fset
  32.         self.fdel = fdel
  33.         self.__doc__ = doc
  34.         if observe is sentinel:
  35.             raise ValueError("'observe' keyword argument is required")
  36.         
  37.         if isinstance(observe, basestring):
  38.             observe = tuple([
  39.                 observe])
  40.         
  41.         self.observe = observe
  42.  
  43.     
  44.     def __get__(self, obj, objtype):
  45.         return self.fget(obj)
  46.  
  47.     
  48.     def __set__(self, obj, value):
  49.         self.fset(obj, value)
  50.  
  51.     
  52.     def __delete__(self, obj):
  53.         self.fdel(obj)
  54.  
  55.     
  56.     def __repr__(self):
  57.         return '<ObservableProperty (%r)>' % self.observe
  58.  
  59.  
  60.  
  61. def main():
  62.     Observable = Observable
  63.     import util.observe
  64.     
  65.     class foo((Observable,)):
  66.         __metaclass__ = ObservableMeta
  67.         
  68.         def __init__(self):
  69.             Observable.__init__(self)
  70.             self._hidden = 'Hello world'
  71.  
  72.         
  73.         def _wikized(self):
  74.             return self._hidden.title().replace(' ', '')
  75.  
  76.         
  77.         def transmutate(self):
  78.             self.setnotify('_hidden', 'Observable properties sure are fun')
  79.  
  80.         wikiword = ObservableProperty(_wikized, observe = '_hidden')
  81.  
  82.     f = foo()
  83.     
  84.     def observer(instance, attr, old, new):
  85.         print '%s: %s -> %s' % (attr, old, new)
  86.  
  87.     f.add_observer(observer, 'wikiword')
  88.     f.transmutate()
  89.     f.setnotify('_hidden', 'another test')
  90.  
  91. if __name__ == '__main__':
  92.     main()
  93.  
  94.